package com.at.bigdata.spark.core.rdd.operator.action

import org.apache.spark.{SparkConf, SparkContext}

/**
 *
 * @author cdhuangchao3
 * @date 2023/3/6 8:40 PM
 */
object Spark07_RDD_foreach {

  def main(args: Array[String]): Unit = {
    // TODO 建立和spark框架的连接
    val sparConf = new SparkConf()
      .setMaster("local")
      .setAppName("WordCount")
    val sc = new SparkContext(sparConf)

    val rdd = sc.makeRDD(List[Int](1, 2, 3, 4), 2)

    val user = new User()

    // Task not serializable
    // java.io.NotSerializableException: com.at.bigdata.spark.core.rdd.operator.action.Spark07_RDD_foreach$User
    // RDD算子中传递的函数是会包含闭包操作，那么就会进行检测功能
    // 闭包检测
    rdd.foreach(
      num => {
        println("num:" + (user.age + num))
      }
    )

    sc.stop()
  }

  //  class User extends Serializable {
  // 样例类在编译时，会自动混入序列化特质（实现可序列化接口）
  //  case class User() {
  class User {
    val age = 10
  }
}
